//: C21:Compose2.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
// Using the SGI STL compose2() function
#include "copy_if.h"
#include <algorithm>
#include <vector>
#include <iostream>
#include <functional>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    srand(time(0));
    vector<int> v(100);
    generate(v.begin(), v.end(), rand);
    transform(v.begin(), v.end(), v.begin(),
              bind2nd(divides<int>(), RAND_MAX/100));
    vector<int> r;
    copy_if(v.begin(), v.end(), back_inserter(r),
            compose2(logical_and<bool>(),
                     bind2nd(greater_equal<int>(), 30),
                     bind2nd(less_equal<int>(), 40)));
    sort(r.begin(), r.end());
    copy(r.begin(), r.end(),
         ostream_iterator<int>(cout, " "));
    cout << endl;
} ///:~
